經過昨天的介紹,我們都知道 pages 是拿來放各頁面的 vue 元件,也知道 router 會依照 pages 目錄結構來生成配置,除了這些之外,到底跟平常的 vue 元件有什麼不一樣?
今天就讓我們一起來研究,pages 元件增加的那些方法/屬性們吧!
我們平常在 vue 元件中使用的是 data 屬性,看到 data 絕對就是放資料的地方,沒有錯啦!
那 syncData 跟我們的 data 有什麼關係呢?
** asyncData 方法使得你能夠在渲染組件之前異步獲取數據。**
data() {
    return { text: '被覆蓋的資料' } 
},
asyncData() {
    return { text: '新資料' } 
}
以上面的例子來說,雖然一開始我們有 data 資料,可資料會在渲染出來之前,就被 asyncData 取回來的資料覆蓋囉!
** asyncData 方法會在元件每次加載之前被調用**,這樣有什麼好處呢?我們用兩種範例示範差別
data → data 更新到畫面asyncData 呼叫 API 取得資料到 data 當預設值→渲染網頁(瀏覽器看的到預設值的資料)這樣大家應該感受的到差別了(?)
簡單來說就是  空網頁 / 有預設值資料的網頁  的差別
若是要深入了解,可以搜尋關鍵字 ** SPA / SSR **
小妹能力有限,菜比八只能先簡單粗略說明,在此抱歉阿!
fetch 方法跟樓上的 asyncData 方法有87%相像,一樣是在網頁渲染之前調用,差別在 fetch 方法填充的是狀態樹(store)數據,若有使用 Vuex 就會用到囉!
這裡說的 head 就是 HTML 的那個 head 沒有錯啦!
在我們 Nuxt.js 裡面,除了擁有全域 head 設定之外,更可以客製化每一個頁面專屬的 head 設定喔!
head 設定nuxt.config.js 檔案meta 設定一一填入即可啦!有沒有簡單?module.exports = {
  head: {
    titleTemplate: '%s - Nuxt.js',
    meta: [
      { charset: 'utf-8' },
      { name: 'viewport', content: 'width=device-width, initial-scale=1' },
      { hid: 'description', name: 'description', content: 'Meta description' }
    ]
  }
}
那你可能會想問,如果要使用外部的 CSS 或 JS 怎麼辦呢?
別擔心,一樣簡單,全域使用就通通丟到 nuxt.config.js 沒有錯啦!
像是常用的 google 字體或是 jQuery 如下範例使用即可。
module.exports = {
  head: {
    script: [
      {
        src: 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js'
      }
    ],
    link: [
      {
        rel: 'stylesheet',
        href: 'https://fonts.googleapis.com/css?family=Roboto'
      }
    ]
  }
}
head 設定<template>
  <h1>{{ title }}</h1>
</template>
<script>
  export default {
    data() {
      return {
        title: 'Hello World!'
      }
    },
    head() {
      return {
        title: this.title,
        meta: [
          {
            hid: 'description',
            name: 'description',
            content: 'My custom description'
          }
        ]
      }
    }
  }
</script>
像這樣就可以客製化每一個頁面的 head 了,是不是很容易呢?
恭喜各位,今天我們一起研究了 pages 元件中的幾個方法,都非常的實用。
明天我們接著把剩下的屬性跟方法研究完畢,讓我們在使用此工具可以更加便利唷!